// Loesung_von_Aufgabe_9.8_2_Absorberplatten

// Radioaktives Präparat, das Alpha-, Beta- und Gammastrahlung aussendet
// Absorptionsmaterialien: Papier (weiß), Aluminium (grau), Blei (dunkelblau)

// Aufruf der Bibliothek Minim
import ddf.minim.*;
Minim minim; // Minim bekommt den Namen "minim"
AudioPlayer rekorder; // Der Audioplayer bekommt den Namen "rekorder"

/* Wenn man hier den "Absorptionswert" für eine Blende einsetzt,
 dann wird diese Blende vor das radioaktive Präparat geschoben */
float p = 0; // Setze für Papier den Wert 5 ein
float a = 15; // Setze für Aluminium den Wert 15 ein
float b = 0; // Setzte für Blei den Wert 90 ein 

// Lage der Absorptionsmaterialien oberhalb des radioaktiven Präparates
float papier = 50;
float aluminium = 50;
float blei = 50;

float x;
float y;
int N; // Zähler

void setup() 
{
  size(600, 400);

  // Die Variable minim wird erstellt
  minim = new Minim (this);

  // Die mp3-Datei wird in den Rekorder geladen
  rekorder = minim.loadFile("knack.mp3");
}

void draw() 
{
  background(180);
  translate(200, 200);

  // Zufallsgenerator für Teilchen die das Zählrohr treffen
  x = random(140-p-a-b, 240+p+a+b);
  y = random(70-p-a-b, 130+p+a+b);

  // radioaktives Präparat im Kasten
  stroke(0);
  strokeWeight(8);
  fill(220, 220, 0);
  beginShape();
  vertex(-90, 112);
  vertex(-90, 135);
  vertex(-165, 135);
  vertex(-165, 70);
  vertex(-90, 70);
  vertex(-90, 90);
  endShape();
  noStroke();
  fill(255, 100, 0);
  ellipse(-128, 103, 46, 46);

  // Stellung der absorbierenden Materialien
  noStroke();
  fill(255);
  if (p > 0)
  {    
    rect(-50, 150, 6, -200);
  } else
    rect(-50, papier, 6, -200);

  fill(100);
  if (a > 0)
  {    
    rect(-20, 150, 12, -200);
  } else
    rect(-20, aluminium, 12, -200);

  fill(0, 0, 100);
  if (b > 0)
  {    
    rect(20, 150, 20, -200);
  } else
    rect(20, blei, 20, -200);

  // Geigerzähler
  fill(0, 0, 255);
  rect(150, 80, 70, 40); // Zählrohr
  stroke(0);
  strokeWeight(5);
  line(220, 100, 270, 100); // Verbindung
  noStroke();
  fill(0);
  rect(270, 60, 60, 90, 20); // Die fünfte Zahl bestimmt die Kantenrundung des Gehäuses
  fill(200);
  ellipse(300, 90, 40, 40); // Kontrolllampe
  // Lautsprecheröffnungen
  ellipse(290, 125, 5, 5);
  ellipse(300, 125, 5, 5);
  ellipse(310, 125, 5, 5);
  ellipse(290, 135, 5, 5);
  ellipse(300, 135, 5, 5);
  ellipse(310, 135, 5, 5);

  if (x > 150 && x < 230 && y > 80 && y < 120)
  {
    // Kontrolllampe soll rot aufleuchten
    noStroke();
    fill(255, 0, 0);
    ellipse(300, 90, 40, 40);

    // Treffer werden gezählt
    N = N + 1;

    // Lautsprechergeräusch
    rekorder.cue(0); // Setzt den Rekorder auf 0 Millisekunden
    rekorder.play(); // Spielt die mp3-Datei ab
  }

  // Anzeige des Nulleffektes
  fill(255);
  textSize(26);
  text("N =  " +N, 130, 50);

  // Anzeige der Zeit
  fill(255);
  textSize(26);
  text("t in s =  " +millis()/1000, 130, 0);

  // Angabe zu den absorbierenden Materialien
  fill(255);
  textSize(30);
  text("Papier", 130, -150);
  fill(70);
  text("Aluminium", 130, -110);
  fill(0, 0, 100);
  text("Blei", 130, -70);

  // Zeitliche Begrenzung der Messung
  if (millis()/1000 >= 5)
    noLoop();
}